/*!
 * \file WTSCfgLoader.h
 * \project WonderTrader
 *
 * \author Wesley
 * \date 2020/03/30
 * 
 * \brief WTS配置文件加载器头文件
 * 
 * \details 本文件定义了WTS配置文件加载器类，用于加载和解析各种格式的配置文件。
 *          主要功能包括：
 *          - 支持JSON和YAML格式的配置文件
 *          - 支持UTF-8编码的配置文件
 *          - 从文件或内容字符串加载配置
 *          - 统一的配置数据结构（WTSVariant）
 *          - 跨平台的文件读取支持
 */
#pragma once
#include "../Includes/WTSMarcos.h"

#include <string>

NS_WTP_BEGIN
class WTSVariant;
NS_WTP_END

USING_NS_WTP;

/*!
 * \class WTSCfgLoader
 * \brief WTS配置文件加载器类
 * 
 * \details WTSCfgLoader提供了统一的配置文件加载接口，支持多种配置文件格式。
 *          该类的主要特点：
 *          - 静态方法设计，无需实例化
 *          - 支持JSON和YAML两种主流配置格式
 *          - 自动检测配置文件格式
 *          - 支持UTF-8编码处理
 *          - 返回统一的WTSVariant数据结构
 *          
 *          使用场景：
 *          - 系统配置文件加载
 *          - 策略参数配置加载
 *          - 运行时配置更新
 *          - 跨平台配置文件处理
 * 
 * \note 所有方法都是静态方法，不需要创建类实例
 * \see WTSVariant
 */
class WTSCfgLoader
{
private:
	/*!
	 * \brief 从JSON内容加载配置
	 * 
	 * \details 解析JSON格式的配置内容，转换为WTSVariant对象
	 * 
	 * \param content JSON格式的配置内容字符串
	 * \return WTSVariant* 解析后的配置对象，失败返回nullptr
	 */
	static WTSVariant*	load_from_json(const char* content);
	
	/*!
	 * \brief 从YAML内容加载配置
	 * 
	 * \details 解析YAML格式的配置内容，转换为WTSVariant对象
	 * 
	 * \param content YAML格式的配置内容字符串
	 * \return WTSVariant* 解析后的配置对象，失败返回nullptr
	 */
	static WTSVariant*	load_from_yaml(const char* content);

public:
	/*!
	 * \brief 从文件加载配置
	 * 
	 * \details 从指定的配置文件加载配置数据，自动检测文件格式（JSON或YAML）。
	 *          支持的文件扩展名：
	 *          - .json：JSON格式
	 *          - .yaml/.yml：YAML格式
	 *          - 其他：根据内容自动检测
	 * 
	 * \param filename 配置文件路径
	 * \param isUTF8 是否为UTF-8编码文件
	 * \return WTSVariant* 解析后的配置对象，失败返回nullptr
	 * 
	 * \note 文件不存在或格式错误时返回nullptr
	 */
	static WTSVariant*	load_from_file(const char* filename, bool isUTF8);
	
	/*!
	 * \brief 从内容字符串加载配置
	 * 
	 * \details 从配置内容字符串加载配置数据，可以指定格式类型
	 * 
	 * \param content 配置内容字符串
	 * \param isYaml 是否为YAML格式，false表示JSON格式
	 * \param isUTF8 是否为UTF-8编码内容
	 * \return WTSVariant* 解析后的配置对象，失败返回nullptr
	 */
	static WTSVariant*	load_from_content(const std::string& content, bool isYaml = false, bool isUTF8 = false);

	/*!
	 * \brief 从文件加载配置（std::string版本）
	 * 
	 * \details 从指定的配置文件加载配置数据的便利方法，接受std::string参数
	 * 
	 * \param filename 配置文件路径（std::string）
	 * \param isUTF8 是否为UTF-8编码文件
	 * \return WTSVariant* 解析后的配置对象，失败返回nullptr
	 */
	static WTSVariant*	load_from_file(const std::string& filename, bool isUTF8)
	{
		return load_from_file(filename.c_str(), isUTF8);
	}
};

